/**
 * "Visual Paradigm: DO NOT MODIFY THIS FILE!"
 * 
 * This is an automatic generated file. It will be regenerated every time 
 * you generate persistence class.
 * 
 * Modifying its content may cause the program not work, or your work may lost.
 */

/**
 * Licensee: Nurhat Uca
 * License Type: Evaluation
 */
package org.testis.orm.manager;

import java.util.Properties;

import org.hibernate.FlushMode;
import org.orm.PersistentException;
import org.orm.PersistentManager;
import org.orm.cfg.JDBCConnectionSetting;

public class TestisDbPersistentManager extends PersistentManager {

    private static final String PROJECT_NAME = "Atofdb";
    private static PersistentManager _instance = null;
    private static SessionType _sessionType = SessionType.ADVANCED_APP_BASE;
    private static int _timeToAlive = Integer.MAX_VALUE;
    private static JDBCConnectionSetting _connectionSetting = null;
    private static Properties _extraProperties = null;

    private TestisDbPersistentManager() throws PersistentException {
	super(_connectionSetting, _sessionType, _timeToAlive, new String[] {},
		_extraProperties);
	setFlushMode(FlushMode.COMMIT);
    }

    public String getProjectName() {
	return PROJECT_NAME;
    }

    public static synchronized final PersistentManager instance()
	    throws PersistentException {
	if (_instance == null) {
	    _instance = new TestisDbPersistentManager();
	}
	return _instance;
    }

    // @Override
    public void disposePersistentManager() throws PersistentException {
	/*
	 * _instance = null; super.disposePersistentManager();
	 */
    }

    public static void setSessionType(SessionType sessionType)
	    throws PersistentException {
	if (_instance != null) {
	    throw new PersistentException(
		    "Cannot set session type after create PersistentManager instance");
	} else {
	    _sessionType = sessionType;
	}

    }

    public static void setAppBaseSessionTimeToAlive(int timeInMs)
	    throws PersistentException {
	if (_instance != null) {
	    throw new PersistentException(
		    "Cannot set session time to alive after create PersistentManager instance");
	} else {
	    _timeToAlive = timeInMs;
	}

    }

    public static JDBCConnectionSetting getJDBCConnectionSetting()
	    throws PersistentException {
	return _connectionSetting;
    }

    public static void setJDBCConnectionSetting(
	    JDBCConnectionSetting aConnectionSetting)
	    throws PersistentException {
	if (_instance != null) {
	    throw new PersistentException(
		    "Cannot set connection setting after create PersistentManager instance");
	} else {
	    _connectionSetting = aConnectionSetting;
	}

    }

    public static void setHibernateProperties(Properties aProperties)
	    throws PersistentException {
	if (_instance != null) {
	    throw new PersistentException(
		    "Cannot set hibernate properties after create PersistentManager instance");
	} else {
	    _extraProperties = aProperties;
	}

    }

    public static void saveJDBCConnectionSetting() {
	PersistentManager.saveJDBCConnectionSetting(PROJECT_NAME,
		_connectionSetting);
    }
}
